package T2_10;

import java.util.HashMap;
import java.util.Map;

public class T10 {

    public static int subarraySum(int[] nums, int k) {
        //思路：前缀和
        //presum[j]-presum[i]=k,k就是区间[i，j)里所有元素的和
        //所以要查询连续和为k子数组就是找遍历到presum[j]时，之前有几个presum[i]=presum[j]-k
        int res=0;
        int presum=0;
        HashMap<Integer, Integer> map = new HashMap<>();    //记录前缀和出现次数
        map.put(0,1);
        for (int num : nums) {
            presum+=num;
            res+=map.getOrDefault(presum-k,0);
            map.put(presum,map.getOrDefault(presum,0)+1);
        }

        return res;

    }
}
